﻿<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:ez="http://www.codeplex.com/ezdeskdev"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                exclude-result-prefixes="msxsl"
                >
  <xsl:output method="xml" indent="yes"/>
  <xsl:param name="appportalurl"></xsl:param>

  <xsl:variable name="upper" select="ABCDEFGHIJKLMNOPQRSTUVWXYZ"></xsl:variable>
  <xsl:variable name="lower" select="abcdefghijklmnopqrstuvwxyz"></xsl:variable>

  <xsl:template  match="root">
    <StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <xsl:if test="@style">
        <xsl:element name="StackPanel.Resources"  namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
          <xsl:call-template name="StyleTemplate">
            <xsl:with-param name="stylestring" select="@style"></xsl:with-param>
            <xsl:with-param name="targettype">StackPanel</xsl:with-param>
          </xsl:call-template>
        </xsl:element>
      </xsl:if>
      <xsl:apply-templates/>
    </StackPanel>
  </xsl:template>

  <xsl:template match="ez:div">
    <xsl:element name="WrapPanel" namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
      <xsl:if test="@style">
        <xsl:element name="WrapPanel.Resources"  namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
          <xsl:call-template name="StyleTemplate">
            <xsl:with-param name="stylestring" select="@style"></xsl:with-param>
            <xsl:with-param name="targettype">WrapPanel</xsl:with-param>
          </xsl:call-template>
        </xsl:element>
      </xsl:if>
      <xsl:element name="TextBlock"  namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <xsl:apply-templates></xsl:apply-templates>
      </xsl:element>
    </xsl:element>
  </xsl:template>
  <xsl:template match="ez:target">
    <xsl:element name="TextBlock" namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
      <xsl:if test="@style">
        <xsl:element name="TextBlock.Resources"  namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
          <xsl:call-template name="StyleTemplate">
            <xsl:with-param name="stylestring" select="@style"></xsl:with-param>
            <xsl:with-param name="targettype">TextBlock</xsl:with-param>
            <xsl:with-param name="basedon">{StaticResource {x:Type TextBlock}}</xsl:with-param>
          </xsl:call-template>
        </xsl:element>
      </xsl:if>
      <xsl:element name="Hyperlink" namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <xsl:apply-templates  select="@funcurl | @url | node()"></xsl:apply-templates>
      </xsl:element>
    </xsl:element>
  </xsl:template>
  <xsl:template match="ez:text">
    <xsl:element name="TextBlock" namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
      <xsl:if test="@style">
        <xsl:element name="TextBlock.Resources"  namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
          <xsl:call-template name="StyleTemplate">
            <xsl:with-param name="stylestring" select="@style"></xsl:with-param>
            <xsl:with-param name="targettype">TextBlock</xsl:with-param>
            <xsl:with-param name="basedon">{StaticResource {x:Type TextBlock}}</xsl:with-param>
          </xsl:call-template>
        </xsl:element>
      </xsl:if>
      <xsl:apply-templates></xsl:apply-templates>
    </xsl:element>
  </xsl:template>
    <xsl:template match="ez:br">
        <xsl:element name="LineBreak" namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        </xsl:element>
    </xsl:template>
  <xsl:template match="@funcurl">
    <xsl:attribute name="NavigateUri">
      <xsl:value-of select="$appportalurl"/>
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

  <xsl:template match="@url">
    <xsl:attribute name="NavigateUri">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

  <xsl:template name="StyleTemplate">
    <xsl:param name="stylestring"></xsl:param>
    <xsl:param name="targettype"></xsl:param>
    <xsl:param name="basedon"></xsl:param>
    <xsl:variable name="style" select="translate($stylestring,$upper,$lower)"></xsl:variable>

    <xsl:element name="Style" namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
      <xsl:attribute name="TargetType">
        <xsl:value-of select="$targettype"/>
      </xsl:attribute>
      <xsl:if test="$basedon">
        <xsl:attribute name="BasedOn">
          <xsl:value-of select="$basedon"/>
        </xsl:attribute>
      </xsl:if>

      <xsl:if test="contains($style,'height')">
        <xsl:variable name="height" select="normalize-space(substring-before(substring-after($style,'height:'),'px'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">Height</xsl:with-param>
          <xsl:with-param name="PropertyValue" select="$height"></xsl:with-param>
        </xsl:call-template>
      </xsl:if>

      <xsl:if test="contains($style,'width')">
        <xsl:variable name="width"
       select="normalize-space(substring-before(substring-after($style,'width:'),'px'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">Width</xsl:with-param>
          <xsl:with-param name="PropertyValue" select="$width"></xsl:with-param>
        </xsl:call-template>
      </xsl:if>

      <xsl:if test="contains($style,color)">
        <xsl:variable name="color"
        select="normalize-space(substring-before(substring-after($style,'color:#'),';'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">Foreground</xsl:with-param>
          <xsl:with-param name="PropertyValue">
            <xsl:text>#FF</xsl:text>
            <xsl:value-of select="$color"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>

      <xsl:if test="contains($style,'font-family')">
        <xsl:variable name="font-family"
      select="normalize-space(substring-before(substring-after($style,'font-family:'),';'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">FontFamily</xsl:with-param>
          <xsl:with-param name="PropertyValue" select="$font-family"></xsl:with-param>
        </xsl:call-template>
      </xsl:if>

      <xsl:if test="contains($style,'background-color')">
        <xsl:variable name="background-color"
        select="normalize-space(substring-before(substring-after($style,'background-color:#'),';'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">Background</xsl:with-param>
          <xsl:with-param name="PropertyValue">
            <xsl:text>#FF</xsl:text>
            <xsl:value-of select="$background-color"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>

      <xsl:if test="contains($style,'font-size')">
        <xsl:variable name="font-size"
        select="normalize-space(substring-before(substring-after($style,'font-size:'),'px'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">FontSize</xsl:with-param>
          <xsl:with-param name="PropertyValue" select="$font-size"></xsl:with-param>
        </xsl:call-template>
      </xsl:if>
      <xsl:if test="contains($style,'font-weight')">
        <xsl:variable name="font-weight"
                      select="normalize-space(substring-before(substring-after($style,'font-weight:'),';'))"/>
        <xsl:call-template name="SetterTemplate">
          <xsl:with-param name="PropertyName">FontWeight</xsl:with-param>
          <xsl:with-param name="PropertyValue" select="$font-weight"></xsl:with-param>
        </xsl:call-template>
      </xsl:if>
    </xsl:element>
  </xsl:template>

  <xsl:template name="SetterTemplate">
    <xsl:param name="PropertyName"></xsl:param>
    <xsl:param name="PropertyValue"></xsl:param>
    <xsl:element name="Setter"  namespace="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
      <xsl:attribute name="Property">
        <xsl:value-of select="$PropertyName"/>
      </xsl:attribute>
      <xsl:attribute name="Value">
        <xsl:value-of select="$PropertyValue"/>
      </xsl:attribute>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
